package pass;

/**
 * @Author: DengJia
 * @Date: 2021/11/30 20:23
 * @Description: 求值策略 之 Java中只有值传递
 * Java中使用的求值策略就是传共享对象调用，也就是说，Java会将对象的地址的拷贝传递给被调函数的形式参数。
 */

public class PassBy {
    public static void main(String[] args) {
        PassBy by = new PassBy();
        String val = "HelloWorld";
        System.out.println("val = " + val);
        by.transformVal(val);
        System.out.println("val = " + val);

        User user = new User(1001, "赵伟");
        System.out.println("user = " + user);
        // Java中的对象传递，是共享对象传递，传共享对象调用其实是传值调用的一个特例
        by.transformUser(user);
        System.out.println("user = " + user);
    }

    public void transformVal(String val) {
        // 在传值调用中，实际参数先被求值，然后其值通过复制，被传递给被调函数的形式参数。
        val += " - suffix";
    }

    public void transformUser(User user) {
        // 在传引用调用中，传递给函数的是它的实际参数的隐式引用而不是实参的拷贝。
        user.setName("DEF-ULT");
    }
}
